Simulation of CURD 模拟CURD操作

下面,我们要尝试下管理系统中最常用的几个 CURD 操作,来模拟一个“用户管理”。

服务端

在服务端,我们要提供 REST 风格的 API。

UserBean

先创建一个用户对象 UserBean.java

  1. @XmlRootElement
  2. public class UserBean {
  3. private int userId;
  4. private String name;
  5. private int age;
  6. public int getUserId() {
  7. return userId;
  8. }
  9. public void setUserId(int userId) {
  10. this.userId = userId;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. }

UserResource

新建一个资源类 UserResource.java 。加@Path("users")注解用来说明 资源根路径是 users.

添加

  1. private static Map<Integer,UserBean> userMap = new HashMap<Integer,UserBean>();

用来在内存中存储数据。可以在 userMap 获取我们想要查询的数据。

完整的代码如下:

  1. @Path("users")
  2. public class UserResource {
  3. private static Map<Integer,UserBean> userMap = new HashMap<Integer,UserBean>();
  4. /**
  5. * 增加
  6. * @param user
  7. */
  8. @POST
  9. @Consumes(MediaType.APPLICATION_JSON)
  10. public List<UserBean> createUser(UserBean user)
  11. {
  12. userMap.put(user.getUserId(), user );
  13. return getAllUsers();
  14. }
  15. /**
  16. * 删除
  17. * @param id
  18. */
  19. @DELETE
  20. @Path("{id}")
  21. public List<UserBean> deleteUser(@PathParam("id")int id){
  22. userMap.remove(id);
  23. return getAllUsers();
  24. }
  25. /**
  26. * 修改
  27. * @param user
  28. */
  29. @PUT
  30. @Consumes(MediaType.APPLICATION_JSON)
  31. public List<UserBean> updateUser(UserBean user){
  32. userMap.put(user.getUserId(), user );
  33. return getAllUsers();
  34. }
  35. /**
  36. * 根据id查询
  37. * @param id
  38. * @return
  39. */
  40. @GET
  41. @Path("{id}")
  42. @Produces(MediaType.APPLICATION_JSON)
  43. public UserBean getUserById(@PathParam("id") int id){
  44. UserBean u = userMap.get(id);
  45. return u;
  46. }
  47. /**
  48. * 查询所有
  49. * @return
  50. */
  51. @GET
  52. @Produces(MediaType.APPLICATION_JSON)
  53. public List<UserBean> getAllUsers(){
  54. List<UserBean> users = new ArrayList<UserBean>();
  55. users.addAll( userMap.values() );
  56. return users;
  57. }
  58. }

为了简单起见,我们约定 POST 就是处理新增,PUT 用来做修改,DELETE 删除,GET 就是查询。

自此,服务端接口开发完毕。

客户端

为了快速测试接口,可以用第三方 REST 客户端测试程序,我这里用的是 RESTClient 插件,可以在火狐中安装使用。

增加用户

我们先增加一个用户对象,使用 JSON 格式:

  1. {
  2. "userId": 1,
  3. "age": 28,
  4. "name": "waylau.com"
  5. }

提示报错:415 未支持媒体格式的错误。

9. Simulation of CURD 模拟CURD操作 - 图1

由于我们在新增的接口里面设置的是

  1. @Consumes(MediaType.APPLICATION_JSON)

规定只接收 JSON 格式,而 默认的 “Conten-Type” 是“text/html”所以在还需要在 header 里设置一下 为 “application/json”:

9. Simulation of CURD 模拟CURD操作 - 图2

就可以了。我们在添加一个用户对象

  1. {
  2. "userId": 2,
  3. "age": 24,
  4. "name": "www.waylau.com"
  5. }

响应的数据里面就能看到我们的添加的用户了。

9. Simulation of CURD 模拟CURD操作 - 图3

修改用户

修改用户1 的数据:

  1. {
  2. "userId": 1,
  3. "age": 24,
  4. "name": "小柳哥"
  5. }

用 PUT 请求:

9. Simulation of CURD 模拟CURD操作 - 图4

在返回的数据里面可以看到用户1 被修改

查询用户

在根据 ID 查询的接口里面

  1. @GET
  2. @Path("{id}")
  3. @Produces(MediaType.APPLICATION_JSON)
  4. public UserBean getUserById(@PathParam("id") int id){
  5. UserBean u = userMap.get(id);
  6. return u;
  7. }

@Path("{id}")指 id 这个子路径是一个变量。我们查询用户1 时,要将用户 1 的 userId 放在请求的URI 里面http://localhost:8080/webapi/users/1

9. Simulation of CURD 模拟CURD操作 - 图5

删除用户

与上面类似,也是用到了@Path("{id}")

9. Simulation of CURD 模拟CURD操作 - 图6

我们看到用户1被删除了。

自此整个应用完成了。这个“用户管理”够简单吧~

源码

simulation-curd